Golang 中国

ayanmw

Golang China 第 8433 号会员,加入于 2018-03-27 20:39


ayanmw最近创建的主题


ayanmw最近回复了


回复了 ssqq 创建的主题: go 不支持类型别名 2018-11-16 22:18

我在goworld看到了type的一种用法,就是
type A=B
这样就可以实现真正的别名了,A和B是相同的,而且不能重复定义方法;
比如
`

type IntSlice []int
func(this*IntSlice)Get(index int){
//...
}
func(this*IntSlice)Push(num int){
//...
}
type IDSlice = IntSlice
var ids=IDSlice{}
ids.Push(1)
ids.Get(1)

`

回复了 jikai507 创建的主题: 怎么让LiteIDE支持tab转换4空格?? 2018-04-07 20:12

tab 是不区分4和8的,只是在具体的环境下,由环境来设置一个tab究竟多长的;

回复了 af913337456 创建的主题: unsafe.Pointer 面试题,几乎没几个人答得对,有人知道答案的原因吗? 2018-04-04 12:44

前两个 c的地址值和&a是一样的, 所以*c="xxx" 是将xxx 拷贝到目标地址,对&c的更改会影响到a

第三个 是&c的地址和&a的地址就不一样,就是两个变量了; 对c的更改不影响a;

回复了 ichenq 创建的主题: 在遍历slice的时候删除其元素导致的panic “slice bounds out of range” 2018-03-28 14:22

我有想到了一种方案,就是 将需要删除的元素放到最后,然后最后一次性删除,减少遍历次数;
代码如下:

func test1() {
    slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
    fmt.Printf("%v\n", slice)
    deleteNum:=0
    var j int=len(slice)-1
    for i:=0;i<len(slice) && i<j;i++{
        if slice[i]%3 == 0 {
            fmt.Println("index ",i," deleteNum++ slice[i]=",slice[i])
            deleteNum++
            for j>i{
                if slice[j]%3!=0{
                    //交换 把要删除的移动到最后
                    slice[i],slice[j]=slice[j],slice[i]
                    fmt.Println("index i=",i,"j=",j," 进行swap ",slice[j],slice[i])
                    fmt.Println("test and break",deleteNum)
                    j--
                    break
                }else{
                    //后面的也是要删除的,删除计数+1
                    deleteNum++
                    fmt.Println("index ",i,j," deleteNum++ =",deleteNum," slice[j]=",slice[j])
                }
                j--
            }
        }
    }
    if(deleteNum>0){
        slice=slice[:len(slice)-deleteNum]
    }
    fmt.Printf("%v\n", slice)
}

缺点就是顺序变了,不过这个应该不是什么大问题的吧。

回复了 ichenq 创建的主题: 在遍历slice的时候删除其元素导致的panic “slice bounds out of range” 2018-03-27 20:44

func test1() {
    slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
restart:
    for i, n := range slice {
        if n%3 == 0 {
            slice = append(slice[:i], slice[i+1:]...)
            goto restart
        }
    }
    fmt.Printf("%v\n", slice)
}

加一个goto吧。这是我想到的最容易的办法了。
1.C++ STL的map支持修改迭代器,但是golang的range 不算迭代器,怎么修改呢?

  1. golang 真变态,如果slice是偶数就不报错,如果是奇数个就报错。(上面slice 如果有偶数个就不报错)
ayanmw 创建的更多回复