Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >每天坚持20分钟go常用的包

每天坚持20分钟go常用的包

原创
作者头像
李子健
发布于 2022-07-03 15:59:07
发布于 2022-07-03 15:59:07
2050
举报
文章被收录于专栏:每日一善每日一善

go常用的内置库

  • 字符串操作
  • bytes
  • json
  • io/bufio
  • fmt
  • strconv
  • time
  • regexp
  • log
  • reflect/unsafe
  • os/path/filepath
  • unicode
  • flag
  • net/url
  • net/http
  • sort
  • error
代码语言:go
AI代码解释
复制
package main

import (
	"bufio"
	"encoding/json"
	"flag"
	"fmt"
	"io"
	"io/ioutil"
	"log"
	"net/http"
	"net/url"
	"os"
	"reflect"
	"regexp"
	"sort"
	"strconv"
	"strings"
	"time"
	"unicode"
	"unsafe"
)

var (
	numberOne int
	nameOne   string
)

//error
type MyError struct {
	Code int    `json:"code"`
	Msg  string `json:"msg"`
}

func NewMyError(code int, msg string) *MyError {
	return &MyError{code, msg}
}

func (self MyError) Error() string {
	return fmt.Sprintf("code:%d, msg:%s", self.Code, self.Msg)
}

func main() {
	//字符串,各类操作
	//包含,替换,分隔
	str := "hello world"
	fmt.Println(strings.Contains(str, "hello"))
	str_slice1 := strings.Split(str, " ")
	fmt.Println(strings.Join(str_slice1, "#"))
	fmt.Println(strings.NewReplacer("h", "k", " ", "#", "d", "a").Replace(str))

	//bytes
	byte1 := []byte(str)
	fmt.Println(byte1)

	//json
	type Person struct {
		Name string `json:"n, omitempty"`
		Age  int    `json:"a, omitempty"`
	}
	p := &Person{Name: "tom", Age: 31}
	data, _ := json.Marshal(p)
	fmt.Printf("data:%s\n", data)
	p2 := &Person{}
	err := json.Unmarshal(data, p2)
	if err != nil {
		fmt.Println(err.Error())
	}
	fmt.Printf("%+v", p2)

	//buffer
	f, err := os.Open("gobase_ch1.go")
	if err != nil {
		panic(err)
	}
	defer f.Close()
	rb := bufio.NewReader(f)
	for {
		line, err := rb.ReadString('\n')
		if err != nil || io.EOF == err {
			break
		}
		fmt.Println(line)
	}

	//strconv
	fmt.Println(strconv.Atoi("12"))

	//time
	time1 := time.Now()
	fmt.Println(time1, time1.Second(), time1.UnixMilli())
	ticker1 := time.NewTicker(time.Second * 1)
	defer ticker1.Stop()
	done := make(chan bool)
	go func() {
		time.Sleep(3 * time.Second)
		done <- true
	}()

BreakTag:
	for {
		select {
		case <-done:
			fmt.Println("Done!")
			break BreakTag
		case t := <-ticker1.C:
			fmt.Println("current time: ", t)
		}
	}

	//error
	fmt.Println(NewMyError(124, "test"))

	//regexp
	reg, err := regexp.Compile("l")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("查找到字符串:", reg.FindString(str))

	//log
	log.Println("test")
	logger := log.New(os.Stdout, "java", log.Lshortfile)
	logger.Println("hello rust")

	//reflect unsafe
	var a int = 333
	type1 := reflect.TypeOf(a)
	value1 := reflect.ValueOf(a)
	fmt.Println(type1, value1)

	fmt.Println(unsafe.Sizeof(p))
	ptr := unsafe.Pointer(p)
	fmt.Println(ptr)
	fmt.Println(*((*string)(ptr)))

	secondField := unsafe.Pointer(uintptr(ptr) + unsafe.Offsetof(p.Age))
	fmt.Println(secondField)
	fmt.Println(*(*int)(secondField))

	//os path filepath
	fileMode, err := os.Stat("gobase.go")

	if os.IsExist(err) {
		fmt.Println(fileMode.Name(), fileMode.Size(), fileMode.Mode())
	} else {
		fmt.Println("not exist")
	}

	str2, err := ioutil.ReadFile("gobase_ch1.go")
	fmt.Println("len=", len(str2))

	//unicode
	fmt.Println(unicode.IsNumber(rune(123)))

	//flag
	flag.IntVar(&numberOne, "n", 10, "number")
	nameOne = *flag.String("name", "tom", "a person'name")
	flag.Parse()
	fmt.Printf("name=%s, number:%d", nameOne, numberOne)

	//net/url
	var urlStr string = "https://rustcc.cn/article?id=0732244c-9a1b-41ac-b22d-825b6674b671"
	vdata, _ := url.Parse(urlStr)
	fmt.Printf("%#v\n", vdata)

	//sort
	list1 := []int{3, 5, 1, 4}
	sort.Ints(list1)
	fmt.Println(list1)

	//net/http
	//client
	resp1, err := http.Get(urlStr)
	if err != nil {
		fmt.Println(err)
	}
	defer resp1.Body.Close()
	content, _ := ioutil.ReadAll(resp1.Body)
	fmt.Println(len(string(content)))

	//server
	http.HandleFunc("/hi", func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("hello"))
	})
	log.Fatal(http.ListenAndServe(":8181", nil))

}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Rust vs Go:常用语法对比(五)
Disjoint matches: overlapping occurrences are not counted.
fliter
2023/09/05
3300
Rust vs Go:常用语法对比(五)
Rust vs Go:常用语法对比(六)
res has type *http.Response. buffer has type []byte. It is idiomatic and strongly recommended to check errors at each step.
fliter
2023/09/05
2550
Rust vs Go:常用语法对比(六)
掌握Go语言:Go语言精细错误,清晰、高效的错误处理实践(32)
错误处理是任何编程语言中都至关重要的一部分,Go 语言提供了一套简单而强大的错误处理机制,使得处理错误变得高效而清晰。
用户6256742
2024/08/18
2610
go语言微信公众号开发后台接口封装
业余时间做了个有意思的小功能,每天早上7点准时给发天气预报,每晚8点发布一条英语说说,提醒自己不能忘记学习。
杨永贞
2020/08/04
2.2K0
Rust vs Go:常用语法对比(十)
题图来自 Rust vs. Golang: Which One is Better?[1] 182. Quine program Output the source of the program. 输
fliter
2023/09/05
2470
Rust vs Go:常用语法对比(十)
Golang 需要避免踩的 50 个坑(三)
Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷。如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到。
aoho求索
2019/03/07
3.4K0
为什么要避免在 Go 中使用 ioutil.ReadAll?
ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。
AlwaysBeta
2022/01/06
2.9K0
腾讯技术团队出品的《面向开发人员梳理的代码安全指南-Go安全指南》
使用"net/http"下的方法http.Get(url)、http.Post(url, contentType, body)、http.Head(url)、http.PostForm(url, data)、http.Do(req)时,如变量值外部可控(指从参数中动态获取),应对请求目标进行严格的安全校验。
公众号: 云原生生态圈
2021/09/26
1.3K0
Go语言进行Web开发(Gin)、配置文件
在 Gin 框架中,你可以使用 ShouldBindJSON() 方法来获取 POST 请求中的 JSON 参数。
码客说
2024/03/29
2850
Rust vs Go:常用语法对比(八)
题目来自 Golang vs. Rust: Which Programming Language To Choose in 2023?[1] 141. Iterate in sequence over
fliter
2023/09/05
3750
Rust vs Go:常用语法对比(八)
Go语言常见坑「建议收藏」
这里列举的Go语言常见坑都是符合Go语言语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。
全栈程序员站长
2022/07/19
5960
2.Go语言之文件操作学习记录.md
描述: 我们可以采用os包中的Open()函数打开一个文件,返回一个*File和一个err。然后对得到的文件实例调用Close()函数就能够关闭文件。
全栈工程师修炼指南
2022/09/29
5120
Go 学习
第一,语言简单,上手快。Go 语言的语法特性简直是太简单了,简单到你几乎玩不出什么花招,直来直去的,学习难度很低,容易上手。
wywwzjj
2023/05/09
2K0
Go 学习
2.Go语言编程学习课后实践
示例1.利用reflect反射实现一个ini配置文件的读取 (ini 文件解析器)。
全栈工程师修炼指南
2022/09/29
7810
2.Go语言编程学习课后实践
Go 语言简介(下) - 特性
goroutine GoRoutine主要是使用go关键字来调用函数,你还可以使用匿名函数,如下所示: package main import "fmt" func f(msg string) { fmt.Println(msg) } func main(){ go f("goroutine") go func(msg string) { fmt.Println(msg) }("going") } 我们再来看一个示例,下面的代码中包括很多内容,包括时间处
李海彬
2018/03/22
2.3K0
golang 基础编程
map 是一种无序的键值对, 它是数据结构 hash 表的一种实现方式,类似 Python 中的字典
全栈程序员站长
2022/07/19
1.3K0
golang 基础编程
Go语言基础速刷手册
这个“不务正业”的阿巩,今天冒着现学现卖的风险来和大家分享Go了,作为既具备C的理念又有Python 姿态的语言,怎么能不来试上一试呢!
才浅Coding攻略
2022/12/12
9540
Go 读取命令参数的几种方式
微信截图_20171129195400.png 一名初学者,想要尽快熟悉 Go 语言特性,所以以操作式的学习方法为主,比如编写一个简单的数学计算器,读取命令行参数,进行数学运算。 本文讲述使用三种方式讲述 Go 语言如何接受命令行参数,并完成一个简单的数学计算,为演示方便,最后的命令行结果大概是这样的: # input ./calc add 1 2 # output 3 # input ./calc sub 1 2 # out -1 # input ./calc mul 10 20 # out 20
谢伟
2018/06/06
1.5K0
GO系列(2)-interface特性
说明struct,在调用方法的时候,值类型既可以调用值接收者的方法,也可以调用指针接收者的方法;指针类型既可以调用指针接收者的方法,也可以调用值接收者的方法
爽朗地狮子
2022/10/20
3130
Go语言的os包中常用函数初步归纳
1)os.Getwd函数原型是func Getwd() (pwd string, err error) 返回的是路径的字符串和一个err信息,为什么先开这个呢?因为我看os的包的时候第一个是Chkdir这个包,但是你不知道当前目录怎么知道改变目录了呢?所以先说Getwd() 函数demo import ( "fmt" "os" ) func main() { dir, _ := os.Getwd() fmt.Println("当前的目录是:", dir) //当前的目录是: D:\test 我
李海彬
2018/03/20
3.6K0
相关推荐
Rust vs Go:常用语法对比(五)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档