Go 基础 坑

本文探讨了Go语言编程中常见的错误,如处理空字符串、数组拷贝、语法错误、闭包变量引用、切片扩容及time.Format的正确用法,并提供了优化建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.字符串空为""

2. 传递的数组是原数组的拷贝,所以是无法通过传递数组的方法去修改原地址的数据的。在GO语言中除了切片(slice)、集合(map)、通道(channel)和接口(interface)之外,其它的都是值传递

3.在多行的Slice、Array和Map语句中遗漏逗号

package main

func main() {  
    x := []int{
    1,
    2 //error,需要加,
    }
    _ = x
}

Compile Errors:

syntax error: unexpected semicolon or newline, expecting comma or }

4.闭包中使用的变量若非作为参数传递,则都是引用传递

package main

import (
	"fmt"
	)

func main() {
	s := []string{"a","b","c"}
	for _,v := range s {
		go func ()  {
			fmt.Println(v)
		}()
	}
	select {}
}

输出

c
c
c
fatal error: all goroutines are asleep - deadlock!

5.append 方法在添加数据后超过原始长度会重新创建新的存储空间

package main

import (
	"fmt"
	)

func Ping(s []int) {
		s = append(s,3)
	}	
func main() {
	s := make([]int, 0)
	fmt.Println(s)
	Ping(s)
	fmt.Println(s)
}

  输出结果:

[]
[]

  最优写法:

package main

import (
	"fmt"
	)

func Ping(s []int) []int {
		s = append(s,3)
		return s
	}	
func main() {
	s := make([]int, 0)
	fmt.Println(s)
	s = Ping(s)
	fmt.Println(s)
}

  6.使用time的Format时,使用自带常量

const (
    ANSIC       = "Mon Jan _2 15:04:05 2006"
    UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
    RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
    RFC822      = "02 Jan 06 15:04 MST"
    RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
    RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
    RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
    RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
    RFC3339     = "2006-01-02T15:04:05Z07:00"
    RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
    Kitchen     = "3:04PM"
    // Handy time stamps.
    Stamp      = "Jan _2 15:04:05"
    StampMilli = "Jan _2 15:04:05.000"
    StampMicro = "Jan _2 15:04:05.000000"
    StampNano  = "Jan _2 15:04:05.000000000"
)

  

转载于:https://www.cnblogs.com/Bejadin/p/7345368.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值