// Copyright 2011 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.//go:build (!cgo && !darwin && !windows && !plan9) || android || (osusergo && !windows && !plan9)package userimport ()var (// unused variables (in this implementation) // modified during test to exercise code paths in the cgo implementation. userBuffer = 0 groupBuffer = 0)func current() (*User, error) { := currentUID()// $USER and /etc/passwd may disagree; prefer the latter if we can get it. // See issue 27524 for more information. , := lookupUserId()if == nil {return , nil } , := os.UserHomeDir() = &User{Uid: ,Gid: currentGID(),Username: os.Getenv("USER"),Name: "", // ignoredHomeDir: , }// On Android, return a dummy user instead of failing.switchruntime.GOOS {case"android":if .Uid == "" { .Uid = "1" }if .Username == "" { .Username = "android" } }// cgo isn't available, but if we found the minimum information // without it, use it:if .Uid != "" && .Username != "" && .HomeDir != "" {return , nil }varstringif .Username == "" { = "$USER" }if .HomeDir == "" {if != "" { += ", " } += "$HOME" }return , fmt.Errorf("user: Current requires cgo or %s set in environment", )}func currentUID() string {if := os.Getuid(); >= 0 {returnstrconv.Itoa() }// Note: Windows returns -1, but this file isn't used on // Windows anyway, so this empty return path shouldn't be // used.return""}func currentGID() string {if := os.Getgid(); >= 0 {returnstrconv.Itoa() }return""}
The pages are generated with Goldsv0.7.0-preview. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.